【Android 安装包优化】APK 打包流程 ( 文件结构 |
您所在的位置:网站首页 › android apk优化 › 【Android 安装包优化】APK 打包流程 ( 文件结构 |
文章目录
一、APK 文件结构二、APK 打包流程三、APK 安装流程四、安卓虚拟机
一、APK 文件结构
Android 应用的安装包时 以 " .apk " 为后缀的 APK 文件 ; APK 是 " Android Package " 的缩写 ; 将打包好的 APK 文件安装到 Android 手机中 , 就是可运行的应用程序 ; APK 文件结构 : ① assets : 资源文件 , 该目录下的资源文件不经过 aapt 工具编译 ; ② lib : 存放 动态库 “.so” 文件 , NDK 中 C / C++ 调用的函数库 ; ③ META-INF : 该目录中存放 apk 的签名文件 ; CERT.SF : 摘要加密 , 使用私钥 对 摘要明文 加密后的 密文信息 , 是加密文件 , 如果要解密该文件 , 必须使用与私钥配对的公钥进行解密 ;CERT.RSA : 文件是签名证书文件 , 存放的是公钥和加密算法的描述 ;MANIFEST.MF : 文件摘要 , 存放程序清单文件 , 包含了 APK 安装包 中所有文件的 摘要明文 ;剩余文件 : 都是可忽略的资源文件 ;④ res : 资源文件 , 经过了 aapt 工具编译后的文件 ; 这个目录下的文件不再介绍 , 太熟悉了 ; ⑤ AndroidManifest.xml : 清单文件 , 声明了 Application , 组件 , 权限 , 元数据 等信息 ; ⑥ classes.dex : Dalvik 字节码文件 , Android 中的可执行文件 , 可以在 Android 系统中运行 ; ⑦ resources.arsc : 资源文件映射表 , 使用 aapt 编译 res 目录下的资源文件形成的文件 , 用于根据 id 查找资源路径 ; 二、APK 打包流程APK 打包流程 : ① 使用 AAPT 工具打包资源文件 , 生成 R.java , resources.ap 文件 ; ② 使用 AIDL tool 工具 , 处理 AIDL 文件 , 生成对应的 Java 文件 ; ③ 使用 javac 工具编译 Java 源码为 class 字节码文件 ; ④ 使用 dx 工具将 class 字节码文件打包成 dex 字节码文件 , 这是 Dalvik 虚拟机字节码文件 ; ⑤ 使用 apkbuilder 工具生成未签名的 apk 文件 ; ⑥ 使用 jarsigner 工具对 apk 文件进行签名 , 生成签名后的文件 ; ⑦ 使用 zipalign 工具对签名后的 apk 文件进行对齐操作 ; 三、APK 安装流程APK 4 4 4 种安装方式 : ① 系统程序安装 ; ② 使用应用市场安装 ; ③ 手机自带安装 ; ④ 使用 ADB 调试工具安装 ; APK 安装流程 : ① 将 APK 安装包复制到 /data/app 目录下解压 , 扫描安装包 ; ② 将 dex 文件保存 /data/dalvik-cache 目录中 ; ③ 在 /data/data/包名 下创建对应 apk 包名的应用数据目录 ; 系统自带程序在 /system/app 目录下 , 获得 adb root 权限后才能删除 ; 应用卸载 , 就是将 /data/app/ , /data/dalvik-cache/ , /data/data/ 等目录下的相关文件删除 ; 四、安卓虚拟机虚拟机是一个可以运行 class , odex , oat 可执行文件的运行环境 ; 常见的虚拟机有 Java 虚拟机 , Dalvik 虚拟机 , ART 虚拟机 ; Java 虚拟机 : 运行的 class 字节码文件 , 运行程序时解码 class 文件中的内容 ; 基于栈架构 , 需要频繁在栈上读写数据 , 造成较多的指令分派 , 更多的内存访问次数 , 比较耗费 CPU 时间 ; 编译时 : Java 源码 , 使用 javac 编译器 , 编译成 class 字节码文件 ; 运行时 : 类加载器通过 Java 类库验证字节码 , 验证通过会后进入 Java 虚拟机 , 进入 Java 解释器 或 即时编译器 , 然后进入运行时系统 , 之后进入操作系统 , 然后调用硬件 ; Dalvik 虚拟机 : 基于 JIT 机制 ( 即时编译技术 ) , Android 5.0 5.0 5.0 以下使用的虚拟机是 Dalvik 虚拟机 , 该虚拟机的可执行文件是 dex 文件 , 该文件比 class 字节码文件更小 ; JIT ( Just In Time ) 即时编译技术 , 对应 Dalvik 虚拟机 ; 基于寄存器架构 , 通过寄存器间接访问数据 , 该方式比基于栈架构速度更快 ; ART 虚拟机 : Android 5.0 5.0 5.0 以上使用的虚拟机是 ART 虚拟机 ; AOT ( Ahhead Of Time ) 预编译技术 , 对应 ART 虚拟机 ; Java 虚拟机 / Dalvik 虚拟机 / ART 虚拟机 都向上层提供了 3 3 3 个接口 , JNI_GetDefaultJavaVMInitArgs JNI_CreateJavaVM JNI_GetCreatedJavaVMS ; 虚拟机之间可实现无缝衔接 ; Dalvik 虚拟机 与 ART 虚拟机区别 : 虚拟机中有个 persist.sys.dvlvik.vm.lib 字段 , 如果该字段存储的是 libdvm.so , 该虚拟机是 Dalvik 虚拟机 ; 如果该字段存储的是 ;ibart.so , 该虚拟机是 ART 虚拟机 ; Dalvik 虚拟机 与 ART 虚拟机可执行文件 : Dalvik 虚拟机加载 dex 文件加载时不是直接加载 dex 文件 , 加载执行的是 odex 文件 , odex 文件是通过 dexopt 工具对 dex 进行优化生成的 ; ART 虚拟机加载 dex 文件时加载的是 oat 文件 , oat 文件时通过 dex2oat 工具对 dex 文件进行优化生成的 ; |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |